From 38732bd33bbf14ead3c3424433b593f832cf3a11 Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Wed, 3 Feb 2016 11:49:51 -0200 Subject: [PATCH 1/7] Translated into Portuguese from Brazil --- README-pt_BR.txt | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 README-pt_BR.txt diff --git a/README-pt_BR.txt b/README-pt_BR.txt new file mode 100644 index 0000000..f3299fb --- /dev/null +++ b/README-pt_BR.txt @@ -0,0 +1,87 @@ +Internacionalização Lib para Minetest +Por Diego Martínez (a.k.a. "Kaeza"). +Lançado como WTFPL. + +Este mod é uma tentativa de fornecer suporte de internacionalização para mods +(algo que Minetest atualmente carece). + +Como posso usá-lo? +A fim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no início de seu(s) arquivo(s) fonte: + + -- Padronizado para suportar cadeias (strings) locais se o mod intllib estiver instalado + local S + if minetest.get_modpath("intllib") then + S = intllib.Getter() + else + -- Se você não usar inserções (@1, @2, etc) você pode usar este: + S = function(s) return s end + + -- Se você usar inserções, mas não usar escapes de inserção (\=, \n, etc) isso vai funcionar: + S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end + + -- Use isso se você precisar de funcionalidade total: + 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 + +Você também vai precisar depender opcionalmente do mod intllib, adicionando "intllib?" +em uma linha vazia de seu depends.txt. Observe também que se intllib não estiver +instalado, a função S() é definido para retornar a string inalterada. Isto é feito +para que você não tenha que regar toneladas de 'if's (ou de estruturas semelhantes) +para verificar se a lib está realmente instalada. + +Em seguida, para cada string "traduzível" em suas fontes, use a função S() +(definida no trecho anterior) para retornar uma string traduzida. Por exemplo: + + minetest.register_node("meu_mod:meu_node", { + description = S("Meu Fabuloso Node"), + <...> + }) + +Em seguida, dentro do diretório do seu mod, crie um diretório chamado 'locale' +no qual você deve colocar os arquivos nomeados com duas letras ( de acordo +com a ISO para códigos de idiomas) para os idiomas que seu mod vai suportar. +Aqui vai um exemplo de arquivo para idioma espanhol ('es.txt'): + + # As linhas que começam com um sinal de libra '#' são comentários e + # efetivamente ignorados pelo carregamento. + # Note-se que comentários duram apenas até o fim da linha; + # Não há nenhum suporte para comentários de várias linhas. + Ola, Mundo! = Hola, Mundo! + String com\npulo de linha = Cadena con\nsaltos de linea + String com um sinal de \= igualdade = Cadena con un signo de \= igualdad + +Como atualmente não existe nenhuma maneira portátil para detectar o idioma, +esta biblioteca tenta várias alternativas, e usa o primeiro encontrado: + - Valor de 'language' definido em 'minetest.conf' + - Variavel de ambiente 'LANG' (normalmente definida em Unix-like SO's). + - Padrão "en". + +Note que, em qualquer caso, apenas até os dois primeiros caracteres são usados +para cada idioma, por exemplo, as definições de "pt_BR.UTF-8", "pt_BR", e "pt" +são todos iguais. +Os usuários do Windows não têm a variavel de ambiente 'LANG' por padrão. +Para adicioná-lo, faça o seguinte: + - Clique em Iniciar > Configurações > Painel de Controle. + - Iniciar o aplicativo "System". + - Clique na aba "Avançado". + - Clique no botão "Variáveis ​​de Ambiente" + - Clique em "Novo". + - Tipo "LANG" (sem aspas) com o nome e o código de linguagem como valor. + - Clique em OK até que todas as caixas de diálogo estão fechadas. +Como alternativa para todas as plataformas, se você não quiser modificar as +configurações do sistema, você pode adicionar a seguinte linha ao seu +arquivo 'minetest.conf': + language = + +Note também que existem alguns problemas com o uso acentos gráficos e, em geral +caracteres não-latinos em strings. Até que uma correção seja encontrada, +por favor, limite-se a usar apenas caracteres da US-ASCII. + + +Obrigado por ler até este ponto. +Se você tiver quaisquer comentários/sugestões, por favor poste no tópico do fórum. + +Haja textos traduzidos! :P +-- +Tutorial criado por Kaeza +Traduzido para Português do Brasil por BrunoMine From 7dfa38d540967e2993e0ab3ce38d17d0a9b5b204 Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Fri, 6 May 2016 12:24:36 -0300 Subject: [PATCH 2/7] renamed --- README.txt => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.txt => README.md (100%) diff --git a/README.txt b/README.md similarity index 100% rename from README.txt rename to README.md From a5177112264594ffdc79526fc7d66b7342eb8a1b Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Fri, 6 May 2016 12:24:55 -0300 Subject: [PATCH 3/7] renamed --- README-pt_BR.txt => README-pt_BR.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README-pt_BR.txt => README-pt_BR.md (100%) diff --git a/README-pt_BR.txt b/README-pt_BR.md similarity index 100% rename from README-pt_BR.txt rename to README-pt_BR.md From 6cfe392b82bf15aa53b10289415edf3bc9ca87e8 Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Wed, 10 Aug 2016 16:25:29 -0300 Subject: [PATCH 4/7] Atualizar fork --- README-es_UY.md | 136 +++++++++++++++++++++++++++++++++++++ README-pt_BR.md | 22 +++--- README.md | 174 ++++++++++++++++++++++++++++++++---------------- 3 files changed, 264 insertions(+), 68 deletions(-) create mode 100644 README-es_UY.md diff --git a/README-es_UY.md b/README-es_UY.md new file mode 100644 index 0000000..79ea84d --- /dev/null +++ b/README-es_UY.md @@ -0,0 +1,136 @@ + +# 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](http://wiki.minetest.net/Installing_Mods) +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` en `minetest.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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +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: + +```lua +-- 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: + +```lua +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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +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`): + +```cfg +# 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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +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](https://forum.minetest.net/viewtopic.php?id=4929). Para +reportar errores, usa el [rastreador](https://github.com/minetest-mods/intllib/issues/new) +en Github. + +¡Que se hagan las traducciones! :P + +\-- + +Suyo, +Kaeza diff --git a/README-pt_BR.md b/README-pt_BR.md index f3299fb..01f273e 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -23,10 +23,10 @@ A fim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole 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 -Você também vai precisar depender opcionalmente do mod intllib, adicionando "intllib?" -em uma linha vazia de seu depends.txt. Observe também que se intllib não estiver +Você também vai precisar depender opcionalmente do mod intllib, adicionando "intllib?" +em uma linha vazia de seu depends.txt. Observe também que se intllib não estiver instalado, a função S() é definido para retornar a string inalterada. Isto é feito -para que você não tenha que regar toneladas de 'if's (ou de estruturas semelhantes) +para que você não tenha que regar toneladas de 'if's (ou de estruturas semelhantes) para verificar se a lib está realmente instalada. Em seguida, para cada string "traduzível" em suas fontes, use a função S() @@ -42,7 +42,7 @@ no qual você deve colocar os arquivos nomeados com duas letras ( de acordo com a ISO para códigos de idiomas) para os idiomas que seu mod vai suportar. Aqui vai um exemplo de arquivo para idioma espanhol ('es.txt'): - # As linhas que começam com um sinal de libra '#' são comentários e + # As linhas que começam com um sinal de libra '#' são comentários e # efetivamente ignorados pelo carregamento. # Note-se que comentários duram apenas até o fim da linha; # Não há nenhum suporte para comentários de várias linhas. @@ -50,16 +50,16 @@ Aqui vai um exemplo de arquivo para idioma espanhol ('es.txt'): String com\npulo de linha = Cadena con\nsaltos de linea String com um sinal de \= igualdade = Cadena con un signo de \= igualdad -Como atualmente não existe nenhuma maneira portátil para detectar o idioma, +Como atualmente não existe nenhuma maneira portátil para detectar o idioma, esta biblioteca tenta várias alternativas, e usa o primeiro encontrado: - Valor de 'language' definido em 'minetest.conf' - Variavel de ambiente 'LANG' (normalmente definida em Unix-like SO's). - Padrão "en". - + Note que, em qualquer caso, apenas até os dois primeiros caracteres são usados -para cada idioma, por exemplo, as definições de "pt_BR.UTF-8", "pt_BR", e "pt" +para cada idioma, por exemplo, as definições de "pt_BR.UTF-8", "pt_BR", e "pt" são todos iguais. -Os usuários do Windows não têm a variavel de ambiente 'LANG' por padrão. +Os usuários do Windows não têm a variavel de ambiente 'LANG' por padrão. Para adicioná-lo, faça o seguinte: - Clique em Iniciar > Configurações > Painel de Controle. - Iniciar o aplicativo "System". @@ -68,13 +68,13 @@ Para adicioná-lo, faça o seguinte: - Clique em "Novo". - Tipo "LANG" (sem aspas) com o nome e o código de linguagem como valor. - Clique em OK até que todas as caixas de diálogo estão fechadas. -Como alternativa para todas as plataformas, se você não quiser modificar as -configurações do sistema, você pode adicionar a seguinte linha ao seu +Como alternativa para todas as plataformas, se você não quiser modificar as +configurações do sistema, você pode adicionar a seguinte linha ao seu arquivo 'minetest.conf': language = Note também que existem alguns problemas com o uso acentos gráficos e, em geral -caracteres não-latinos em strings. Até que uma correção seja encontrada, +caracteres não-latinos em strings. Até que uma correção seja encontrada, por favor, limite-se a usar apenas caracteres da US-ASCII. diff --git a/README.md b/README.md index 4fc43cd..185ca1d 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,143 @@ -Internationalization Lib for Minetest -By Diego Martínez (a.k.a. "Kaeza"). +# Internationalization Lib for Minetest + +By Diego Martínez (kaeza). Released as WTFPL. This mod is an attempt at providing internationalization support for mods (something Minetest currently lacks). -How do I use it? +## How to use + +### For end users + +To use this mod, just [install it](http://wiki.minetest.net/Installing_Mods) +and enable it in the GUI. + +The mod tries to detect the user's language, but since there's currently no +portable way to do this, it tries several alternatives, and uses the first one +found: + + * `language` setting in `minetest.conf`. + * If that's not set, it uses the `LANG` environment variable (this is + always set on Unix-like OSes). + * If all else fails, uses `en` (which basically means untranslated strings). + +In any case, the end result should be the +[ISO 639-1 Language Code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +of the desired language. Also note that (currently) only up to the first two +characters are used, so for example, the settings `de_DE.UTF-8`, `de_DE`, +and `de` are all equal. + +Some common codes are `es` for Spanish, `pt` for Portuguese, `fr` for French, +`it` for Italian, `de` for German. + +### For mod developers + In order to enable it for your mod, copy the following code snippet and paste it at the beginning of your source file(s): - -- Boilerplate to support localized strings if intllib mod is installed. - local S - if minetest.get_modpath("intllib") then - S = intllib.Getter() - else - -- If you don't use insertions (@1, @2, etc) you can use this: - S = function(s) return s end +```lua +-- Boilerplate to support localized strings if intllib mod is installed. +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + -- If you don't use insertions (@1, @2, etc) you can use this: + S = function(s) return s end - -- If you use insertions, but not insertion escapes this will work: - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end + -- If you use insertions, but not insertion escapes this will work: + S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end - -- Use this if you require full functionality - 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 + -- Use this if you require full functionality + 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 +``` -You will also need to optionally depend on intllib, to do so add "intllib?" to -a empty line in your depends.txt. Also note that if intllib is not installed, -the S() function is defined so it returns the string unchanged. This is done -so you don't have to sprinkle tons of 'if's (or similar constructs) to check +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 `S` function is defined so it returns 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. -Next, for each "translatable" string in your sources, use the S() function +Next, for each translatable string in your sources, use the `S` function (defined in the snippet) to return the translated string. For example: - minetest.register_node("mymod:mynode", { - description = S("My Fabulous Node"), - <...> - }) +```lua +minetest.register_node("mymod:mynode", { + -- Simple string: + description = S("My Fabulous Node"), + -- String with insertions: + description = S("@1 Car", "Blue"), + -- ... +}) +``` -Then, you create a `locale' directory inside your mod directory, with files -named after the two-letter ISO Language Code of the languages you want to -support. Here's an example for a Spanish locale file (`es.txt'): +Then, you create a `locale` directory inside your mod directory, and create +a "template" file (by convention, named `template.txt`) with all the +translatable strings (see *Locale file format* below). Translators will +translate the strings in this file to add languages to your mod. - # 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. - Hello, World! = Hola, Mundo! - String with\nnewlines = Cadena con\nsaltos de linea - String with an \= equals sign = Cadena con un signo de \= igualdad +### For translators -Since there's currently no portable way to detect the language, this library -tries several alternatives, and uses the first one found: - - `language' setting in `minetest.conf' - - `LANG' environment variable (this is always set on Unix-like OSes). - - Default of "en". -Note that in any case only up to the first two characters are used, so for -example, the settings "de_DE.UTF-8", "de_DE", and "de" are all equal. -Windows users have no `LANG' environment variable by default. To add it, do -the following: - - Click Start->Settings->Control Panel. - - Start the "System" applet. - - Click on the "Advanced" tab. - - Click on the "Environment variables" button - - Click "New". - - Type "LANG" (without quotes) as name and the language code as value. - - Click OK until all dialogs are closed. -Alternatively for all platforms, if you don't want to modify system settings, -you may add the following line to your `minetest.conf' file: - language = +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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +of your language. -Also note that there are some problems with using accented, and in general -non-latin characters in strings. Until a fix is found, please limit yourself -to using only US-ASCII characters. +Open up the new file in your favorite editor, and translate each line putting +the translated text after the equals sign. + +See *Locale file format* below for more information about the file format. + +## Locale file format + +Here's an example for a Spanish locale file (`es.txt`): + +```cfg +# 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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +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. + +## Final words Thanks for reading up to this point. -Should you have any comments/suggestions, please post them in the forum topic. +Should you have any comments/suggestions, please post them in the +[forum topic](https://forum.minetest.net/viewtopic.php?id=4929). For bug +reports, use the [bug tracker](https://github.com/minetest-mods/intllib/issues/new) +on Github. Let there be translated texts! :P --- + +\-- + Yours Truly, Kaeza From 675544c60c95c92f415887205b4eedb53ed4770e Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Wed, 10 Aug 2016 18:37:01 -0300 Subject: [PATCH 5/7] Atualizado --- README-pt_BR.md | 184 +++++++++++++++++++++++++++++++----------------- 1 file changed, 120 insertions(+), 64 deletions(-) diff --git a/README-pt_BR.md b/README-pt_BR.md index 01f273e..065c321 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -1,87 +1,143 @@ -Internacionalização Lib para Minetest -Por Diego Martínez (a.k.a. "Kaeza"). + +# Lib de Internacionalização para Minetest + +Por Diego Martínez (kaeza). Lançado como WTFPL. Este mod é uma tentativa de fornecer suporte de internacionalização para mods (algo que Minetest atualmente carece). -Como posso usá-lo? -A fim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no início de seu(s) arquivo(s) fonte: +## Como usar + +### Para usuários finais + +Para usar este mod, basta [instalá-lo] (http://wiki.minetest.net/Installing_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`. + * Se isso não for definido, ele usa a variável de ambiente `LANG` (isso + é sempre definido em SO's Unix-like). + * Se todos falharem, usa `en` (que basicamente significa string não traduzidas). + +Em todo caso, o resultado final deve ser um +[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +do idioma desejado. Observe também que (atualmente) somente até os dois primeiros +caracteres são usados, assim, por exemplo, os códigos `pt_BR.UTF-8`, `pt_BR`, e `pt` +são todos iguais. + +Alguns códigos comuns são `es` para o espanhol, `pt` para Português, `fr` para o +francês, `It` para o italiano, `de` Alemão. + +### Para desenvolvedores de mod + +Afim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no +início de seu(s) arquivo(s) fonte(s): + +```lua +-- Clichê para apoiar cadeias localizadas se mod intllib está instalado. +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + -- Se você não usar inserções (@1, @2, etc) você pode usar este: + S = function(s) return s end + + -- Se você usar inserções, mas não usar escapes de inserção (\=, \n, etc) isso vai funcionar: + S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end + + -- Use isso se você precisar de funcionalidade total: + 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 +``` - -- Padronizado para suportar cadeias (strings) locais se o mod intllib estiver instalado - local S - if minetest.get_modpath("intllib") then - S = intllib.Getter() - else - -- Se você não usar inserções (@1, @2, etc) você pode usar este: - S = function(s) return s end - - -- Se você usar inserções, mas não usar escapes de inserção (\=, \n, etc) isso vai funcionar: - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end - - -- Use isso se você precisar de funcionalidade total: - 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 - Você também vai precisar depender opcionalmente do mod intllib, adicionando "intllib?" em uma linha vazia de seu depends.txt. Observe também que se intllib não estiver instalado, a função S() é definido para retornar a string inalterada. Isto é feito -para que você não tenha que regar toneladas de 'if's (ou de estruturas semelhantes) +para que você não tenha que usar dezenas de 'if's (ou de estruturas semelhantes) para verificar se a lib está realmente instalada. Em seguida, para cada string "traduzível" em suas fontes, use a função S() (definida no trecho anterior) para retornar uma string traduzida. Por exemplo: - minetest.register_node("meu_mod:meu_node", { - description = S("Meu Fabuloso Node"), - <...> - }) - -Em seguida, dentro do diretório do seu mod, crie um diretório chamado 'locale' -no qual você deve colocar os arquivos nomeados com duas letras ( de acordo -com a ISO para códigos de idiomas) para os idiomas que seu mod vai suportar. -Aqui vai um exemplo de arquivo para idioma espanhol ('es.txt'): +```lua +minetest.register_node("mymod:meunode", { + -- String simples + description = S("Meu Node Fabuloso"), + -- String com inserção de variáveis + description = S("@1 Car", "Blue"), + -- ... +}) +``` - # As linhas que começam com um sinal de libra '#' são comentários e - # efetivamente ignorados pelo carregamento. - # Note-se que comentários duram apenas até o fim da linha; - # Não há nenhum suporte para comentários de várias linhas. - Ola, Mundo! = Hola, Mundo! - String com\npulo de linha = Cadena con\nsaltos de linea - String com um sinal de \= igualdade = Cadena con un signo de \= igualdad +Em seguida, crie um diretório chamado `locale` dentro do diretório do seu mod, +e crie um arquivo modelo (por convenção, nomeado `template.txt`) contendo todas +as strings traduzíveis (veja *Formato de arquivo Locale* abaixo). Tradutores +irão traduzir as strings neste arquivo para adicionar idiomas ao seu mod. -Como atualmente não existe nenhuma maneira portátil para detectar o idioma, -esta biblioteca tenta várias alternativas, e usa o primeiro encontrado: - - Valor de 'language' definido em 'minetest.conf' - - Variavel de ambiente 'LANG' (normalmente definida em Unix-like SO's). - - Padrão "en". +### Para tradutores -Note que, em qualquer caso, apenas até os dois primeiros caracteres são usados -para cada idioma, por exemplo, as definições de "pt_BR.UTF-8", "pt_BR", e "pt" -são todos iguais. -Os usuários do Windows não têm a variavel de ambiente 'LANG' por padrão. -Para adicioná-lo, faça o seguinte: - - Clique em Iniciar > Configurações > Painel de Controle. - - Iniciar o aplicativo "System". - - Clique na aba "Avançado". - - Clique no botão "Variáveis ​​de Ambiente" - - Clique em "Novo". - - Tipo "LANG" (sem aspas) com o nome e o código de linguagem como valor. - - Clique em OK até que todas as caixas de diálogo estão fechadas. -Como alternativa para todas as plataformas, se você não quiser modificar as -configurações do sistema, você pode adicionar a seguinte linha ao seu -arquivo 'minetest.conf': - language = +Para traduzir um mod intllib-apoiado para o idioma desejado, copie o +arquivo `locale/template.txt` para`locale/IDIOMA.txt` (onde `IDIOMA` é o +[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +do idioma desejado. -Note também que existem alguns problemas com o uso acentos gráficos e, em geral -caracteres não-latinos em strings. Até que uma correção seja encontrada, -por favor, limite-se a usar apenas caracteres da US-ASCII. +Abra o novo arquivo no seu editor favorito, e traduza cada linha colocando +o texto traduzido após o sinal de igual. +Veja *Formato de arquivo Locale* abaixo para mais informações sobre o formato de arquivo. + +## Formato de arquivo Locale + +Aqui está um exemplo de um arquivo locale Português (`pt.txt`): + +```cfg +# Um comentário. +# Outro Comentário. +Esta linha é ignorada, uma vez que não tem sinal de igual. +Hello, World! = Ola, Mundo! +String with\nnewlines = String com\nsaltos de linha +String with an \= equals sign = String com sinal de \= igual +``` + +Locale (ou tradução) são arquivos de texto simples que consistem em linhas da +forma `texto de origem = texto traduzido`. O arquivo deve residir no subdiretório +`locale` do mod, e deve ser nomeado com as duas letras do +[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) +do idioma que deseja apoiar. + +Os arquivos de tradução devem usar a codificação UTF-8. + +As linhas que começam com um sinal de libra (#) são comentários e são efetivamente +ignorados pelo interpretador. Note que comentários duram apenas até o fim da linha; +não há suporte para comentários de várias linhas. Linhas sem um sinal de igual são +ignoradas também. + +Caracteres considerados "especiais" podem ser "escapados" para que sejam +interpretados corretamente. Existem várias sequências de escape que podem ser usadas: + + * Qualquer `#` ou `=` pode ser escapado para ser interpretado corretamente. + A sequência `\#` é útil se o texto de origem começa com `#`. + * Sequências de escape comuns são `\n` e` \t`, ou seja, de nova linha e + guia horizontal, respectivamente. + * A sequência de escape especial `\s` representa o caractere de espaço. isto + pode ser útil principalmente para adicionar espaços antes ou depois de fonte ou + textos traduzida, uma vez que estes espaços seriam removidos de outro modo. + +## Palavras Finais Obrigado por ler até este ponto. -Se você tiver quaisquer comentários/sugestões, por favor poste no tópico do fórum. +Se você tiver quaisquer comentários/sugestões, por favor poste no +[Tópico do fórum](https://forum.minetest.net/viewtopic.php?id=4929) (em inglês). Para +relatórios de bugs, use o [Rastreador de bugs](https://github.com/minetest-mods/intllib/issues/new) +no Github. Haja textos traduzidos! :P --- -Tutorial criado por Kaeza -Traduzido para Português do Brasil por BrunoMine + +\-- + +Atenciosamente, +Kaeza From 2fb9987678dba329c07d7c442713ee5d0bb6e1a2 Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Wed, 10 Aug 2016 18:48:59 -0300 Subject: [PATCH 6/7] Update README-pt_BR.md --- README-pt_BR.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-pt_BR.md b/README-pt_BR.md index 065c321..726f84a 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -32,9 +32,9 @@ são todos iguais. Alguns códigos comuns são `es` para o espanhol, `pt` para Português, `fr` para o francês, `It` para o italiano, `de` Alemão. -### Para desenvolvedores de mod +### Para desenvolvedores de mods -Afim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no +A fim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no início de seu(s) arquivo(s) fonte(s): ```lua From e5636432aa9c213650089276644fa0e12575158f Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Thu, 13 Jul 2017 14:11:08 -0300 Subject: [PATCH 7/7] Add Selected gettext --- README-pt_BR.md | 141 ------------------------------------------ README.md | 141 ------------------------------------------ gettext.lua | 16 ++++- init.lua | 11 +++- intltest/init.lua | 7 ++- intltest/intllib.lua | 48 +++++++++++++- intltest/locale/de.po | 45 ++++++++++++++ intltest/locale/pt.po | 45 ++++++++++++++ lib/intllib.lua | 8 ++- 9 files changed, 169 insertions(+), 293 deletions(-) create mode 100644 intltest/locale/de.po create mode 100644 intltest/locale/pt.po diff --git a/README-pt_BR.md b/README-pt_BR.md index 382ccff..bdb2f3e 100644 --- a/README-pt_BR.md +++ b/README-pt_BR.md @@ -1,20 +1,11 @@ -<<<<<<< HEAD # Lib de Internacionalização para Minetest Por Diego Martínez (kaeza). Lançado sob Unlicense. Veja `LICENSE.md` para detalhes. -======= - -# Lib de Internacionalização para Minetest - -Por Diego Martínez (kaeza). -Lançado como WTFPL. ->>>>>>> master Este mod é uma tentativa de fornecer suporte de internacionalização para mods (algo que Minetest atualmente carece). -<<<<<<< HEAD Se você tiver algum comentário/sugestão, favor postar no [tópico do fórum][topico]. Para reportar bugs, use o @@ -30,13 +21,6 @@ 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] -======= -## Como usar - -### Para usuários finais - -Para usar este mod, basta [instalá-lo] (http://wiki.minetest.net/Installing_Mods) ->>>>>>> master e habilita-lo na GUI. O modificador tenta detectar o idioma do usuário, mas já que não há atualmente @@ -44,7 +28,6 @@ nenhuma maneira portátil para fazer isso, ele tenta várias alternativas, e usa o primeiro encontrado: * `language` definido em `minetest.conf`. -<<<<<<< HEAD * Variável de ambiente `LANGUAGE`. * Variável de ambiente `LANG`. * Se todos falharem, usa `en` (inglês). @@ -65,127 +48,3 @@ Se você é um tradutor, consulte `doc/translator.md`. [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 -======= - * Se isso não for definido, ele usa a variável de ambiente `LANG` (isso - é sempre definido em SO's Unix-like). - * Se todos falharem, usa `en` (que basicamente significa string não traduzidas). - -Em todo caso, o resultado final deve ser um -[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -do idioma desejado. Observe também que (atualmente) somente até os dois primeiros -caracteres são usados, assim, por exemplo, os códigos `pt_BR.UTF-8`, `pt_BR`, e `pt` -são todos iguais. - -Alguns códigos comuns são `es` para o espanhol, `pt` para Português, `fr` para o -francês, `It` para o italiano, `de` Alemão. - -### Para desenvolvedores de mods - -A fim de habilitá-lo para o seu mod, copie o seguinte trecho de código e cole no -início de seu(s) arquivo(s) fonte(s): - -```lua --- Clichê para apoiar cadeias localizadas se mod intllib está instalado. -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - -- Se você não usar inserções (@1, @2, etc) você pode usar este: - S = function(s) return s end - - -- Se você usar inserções, mas não usar escapes de inserção (\=, \n, etc) isso vai funcionar: - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end - - -- Use isso se você precisar de funcionalidade total: - 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 -``` - -Você também vai precisar depender opcionalmente do mod intllib, adicionando "intllib?" -em uma linha vazia de seu depends.txt. Observe também que se intllib não estiver -instalado, a função S() é definido para retornar a string inalterada. Isto é feito -para que você não tenha que usar dezenas de 'if's (ou de estruturas semelhantes) -para verificar se a lib está realmente instalada. - -Em seguida, para cada string "traduzível" em suas fontes, use a função S() -(definida no trecho anterior) para retornar uma string traduzida. Por exemplo: - -```lua -minetest.register_node("mymod:meunode", { - -- String simples - description = S("Meu Node Fabuloso"), - -- String com inserção de variáveis - description = S("@1 Car", "Blue"), - -- ... -}) -``` - -Em seguida, crie um diretório chamado `locale` dentro do diretório do seu mod, -e crie um arquivo modelo (por convenção, nomeado `template.txt`) contendo todas -as strings traduzíveis (veja *Formato de arquivo Locale* abaixo). Tradutores -irão traduzir as strings neste arquivo para adicionar idiomas ao seu mod. - -### Para tradutores - -Para traduzir um mod intllib-apoiado para o idioma desejado, copie o -arquivo `locale/template.txt` para`locale/IDIOMA.txt` (onde `IDIOMA` é o -[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -do idioma desejado. - -Abra o novo arquivo no seu editor favorito, e traduza cada linha colocando -o texto traduzido após o sinal de igual. - -Veja *Formato de arquivo Locale* abaixo para mais informações sobre o formato de arquivo. - -## Formato de arquivo Locale - -Aqui está um exemplo de um arquivo locale Português (`pt.txt`): - -```cfg -# Um comentário. -# Outro Comentário. -Esta linha é ignorada, uma vez que não tem sinal de igual. -Hello, World! = Ola, Mundo! -String with\nnewlines = String com\nsaltos de linha -String with an \= equals sign = String com sinal de \= igual -``` - -Locale (ou tradução) são arquivos de texto simples que consistem em linhas da -forma `texto de origem = texto traduzido`. O arquivo deve residir no subdiretório -`locale` do mod, e deve ser nomeado com as duas letras do -[Código de Idioma ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -do idioma que deseja apoiar. - -Os arquivos de tradução devem usar a codificação UTF-8. - -As linhas que começam com um sinal de libra (#) são comentários e são efetivamente -ignorados pelo interpretador. Note que comentários duram apenas até o fim da linha; -não há suporte para comentários de várias linhas. Linhas sem um sinal de igual são -ignoradas também. - -Caracteres considerados "especiais" podem ser "escapados" para que sejam -interpretados corretamente. Existem várias sequências de escape que podem ser usadas: - - * Qualquer `#` ou `=` pode ser escapado para ser interpretado corretamente. - A sequência `\#` é útil se o texto de origem começa com `#`. - * Sequências de escape comuns são `\n` e` \t`, ou seja, de nova linha e - guia horizontal, respectivamente. - * A sequência de escape especial `\s` representa o caractere de espaço. isto - pode ser útil principalmente para adicionar espaços antes ou depois de fonte ou - textos traduzida, uma vez que estes espaços seriam removidos de outro modo. - -## Palavras Finais - -Obrigado por ler até este ponto. -Se você tiver quaisquer comentários/sugestões, por favor poste no -[Tópico do fórum](https://forum.minetest.net/viewtopic.php?id=4929) (em inglês). Para -relatórios de bugs, use o [Rastreador de bugs](https://github.com/minetest-mods/intllib/issues/new) -no Github. - -Haja textos traduzidos! :P - -\-- - -Atenciosamente, -Kaeza ->>>>>>> master diff --git a/README.md b/README.md index 4b50d9c..de7cfa3 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,11 @@ # Internationalization Lib for Minetest By Diego Martínez (kaeza). -<<<<<<< HEAD Released under Unlicense. See `LICENSE.md` for details. -======= -Released as WTFPL. ->>>>>>> master This mod is an attempt at providing internationalization support for mods (something Minetest currently lacks). -<<<<<<< HEAD Should you have any comments/suggestions, please post them in the [forum topic][topic]. For bug reports, use the [bug tracker][bugtracker] on Github. @@ -46,139 +41,3 @@ If you are a translator, see `doc/translator.md`. [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 -======= -## How to use - -### For end users - -To use this mod, just [install it](http://wiki.minetest.net/Installing_Mods) -and enable it in the GUI. - -The mod tries to detect the user's language, but since there's currently no -portable way to do this, it tries several alternatives, and uses the first one -found: - - * `language` setting in `minetest.conf`. - * If that's not set, it uses the `LANG` environment variable (this is - always set on Unix-like OSes). - * If all else fails, uses `en` (which basically means untranslated strings). - -In any case, the end result should be the -[ISO 639-1 Language Code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -of the desired language. Also note that (currently) only up to the first two -characters are used, so for example, the settings `de_DE.UTF-8`, `de_DE`, -and `de` are all equal. - -Some common codes are `es` for Spanish, `pt` for Portuguese, `fr` for French, -`it` for Italian, `de` for German. - -### For mod developers - -In order to enable it for your mod, copy the following code snippet and paste -it at the beginning of your source file(s): - -```lua --- Boilerplate to support localized strings if intllib mod is installed. -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - -- If you don't use insertions (@1, @2, etc) you can use this: - S = function(s) return s end - - -- If you use insertions, but not insertion escapes this will work: - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end - - -- Use this if you require full functionality - 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 -``` - -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 `S` function is defined so it returns 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. - -Next, for each translatable string in your sources, use the `S` function -(defined in the snippet) to return the translated string. For example: - -```lua -minetest.register_node("mymod:mynode", { - -- Simple string: - description = S("My Fabulous Node"), - -- String with insertions: - description = S("@1 Car", "Blue"), - -- ... -}) -``` - -Then, you create a `locale` directory inside your mod directory, and create -a "template" file (by convention, named `template.txt`) with all the -translatable strings (see *Locale file format* below). Translators will -translate the strings in this file to add languages to your mod. - -### For translators - -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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -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 *Locale file format* below for more information about the file format. - -## Locale file format - -Here's an example for a Spanish locale file (`es.txt`): - -```cfg -# 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](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -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. - -## Final words - -Thanks for reading up to this point. -Should you have any comments/suggestions, please post them in the -[forum topic](https://forum.minetest.net/viewtopic.php?id=4929). For bug -reports, use the [bug tracker](https://github.com/minetest-mods/intllib/issues/new) -on Github. - -Let there be translated texts! :P - -\-- - -Yours Truly, -Kaeza ->>>>>>> master diff --git a/gettext.lua b/gettext.lua index 26a2d73..5f3c79f 100644 --- a/gettext.lua +++ b/gettext.lua @@ -209,9 +209,19 @@ local function load_catalog(filename) return data end -function M.load_catalogs(path) - local langs = intllib.get_detected_languages() - +function M.load_catalogs(path, first_lang) + + -- add selected first lang + if first_lang then + langs = {} + table.insert(langs, first_lang) + for _, lang in ipairs(intllib.get_detected_languages()) do + langs[#langs+1] = lang + end + else + langs = intllib.get_detected_languages() + end + local cats = { } for _, lang in ipairs(langs) do local cat = load_catalog(path.."/"..lang..".po") diff --git a/init.lua b/init.lua index 0778a73..ab7e53e 100644 --- a/init.lua +++ b/init.lua @@ -178,8 +178,15 @@ function intllib.make_gettext_pair(modname) or getter(msgid)) return do_replacements(msgstr, ...) end - gettext_getters[modname] = { gettext_func, ngettext_func } - return gettext_func, ngettext_func + -- Get string of Selected language + local function sgettext_func(lang, msgid, ...) + local scatalogs = gettext.load_catalogs(localedir, lang) + local msgstr = (catgettext(scatalogs, msgid) + or getter(msgid)) + return do_replacements(msgstr, ...) + end + gettext_getters[modname] = { gettext_func, ngettext_func, sgettext_func } + return gettext_func, ngettext_func, sgettext_func end diff --git a/intltest/init.lua b/intltest/init.lua index e855621..89735c6 100644 --- a/intltest/init.lua +++ b/intltest/init.lua @@ -1,7 +1,7 @@ -- Load support for intllib. local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") +local S, NS, SS = dofile(MP.."/intllib.lua") local use_count = 0 @@ -26,3 +26,8 @@ minetest.register_craftitem("intltest:test", { minetest.chat_send_player(user:get_player_name(), message) end, }) + +minetest.log("action", "(nil)"..SS(nil, "Test: @1 @2", SS(nil, "Blue"), SS(nil, "Car"))) +minetest.log("action", "(es) "..SS("es", "Test: @1 @2", SS("es", "Blue"), SS("es", "Car"))) +minetest.log("action", "(pt) "..SS("pt", "Test: @1 @2", SS("pt", "Blue"), SS("pt", "Car"))) +minetest.log("action", "(de) "..SS("de", "Test: @1 @2", SS("de", "Blue"), SS("de", "Car"))) diff --git a/intltest/intllib.lua b/intltest/intllib.lua index c2eb8dc..e1705e9 100644 --- a/intltest/intllib.lua +++ b/intltest/intllib.lua @@ -1,3 +1,47 @@ --- This file should be replaced by `intllib/lib/intllib.lua`. -return dofile(minetest.get_modpath("intllib").."/lib/intllib.lua") +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext, sgettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext, sgettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +sgettext = sgettext or gettext + +return gettext, ngettext, sgettext diff --git a/intltest/locale/de.po b/intltest/locale/de.po new file mode 100644 index 0000000..ec772f1 --- /dev/null +++ b/intltest/locale/de.po @@ -0,0 +1,45 @@ +# 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. +# Diego Martnez , 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-07-13 13: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" +"X-Generator: Gtranslator 2.91.7\n" + +#: init.lua +msgid "Hello, world!" +msgstr "Hallo Welt!" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Blue" +msgstr "Blau" + +#: init.lua +msgid "Car" +msgstr "Auto" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Test: @1 @2" +msgstr "Test: @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] "" +msgstr[1] "" diff --git a/intltest/locale/pt.po b/intltest/locale/pt.po new file mode 100644 index 0000000..6f6b323 --- /dev/null +++ b/intltest/locale/pt.po @@ -0,0 +1,45 @@ +# 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. +# Diego Martnez , 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-07-13 13:35-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" +"X-Generator: Gtranslator 2.91.7\n" + +#: init.lua +msgid "Hello, world!" +msgstr "Ola, 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 "Teste: @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] "Esse objeto foi usado @1 vez." +msgstr[1] "Esse objeto foi usado @2 vezes." diff --git a/lib/intllib.lua b/lib/intllib.lua index 6669d72..e1705e9 100644 --- a/lib/intllib.lua +++ b/lib/intllib.lua @@ -21,11 +21,11 @@ local function format(str, ...) return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) end -local gettext, ngettext +local gettext, ngettext, sgettext if minetest.get_modpath("intllib") then if intllib.make_gettext_pair then -- New method using gettext. - gettext, ngettext = intllib.make_gettext_pair() + gettext, ngettext, sgettext = intllib.make_gettext_pair() else -- Old method using text files. gettext = intllib.Getter() @@ -42,4 +42,6 @@ ngettext = ngettext or function(msgid, msgid_plural, n, ...) return format(n==1 and msgid or msgid_plural, ...) end -return gettext, ngettext +sgettext = sgettext or gettext + +return gettext, ngettext, sgettext