Gettext: Error de updatepo

Hola a todos, mi problema es el siguiente:

He instalado gettext para internacionalizar mi aplicación y he añadido
las
tareas rake. Al ejecutar updatepo me sale este mensaje (negritas mías)

Error occurs in app/models/fichero.rb
rake aborted!
no implicit conversion from nil to integer

El fichero .rb no tiene nada, solo las asociaciones has_many y demás.
Mi
Rakefile contiene esto

task :updatepo do
MY_APP_TEXT_DOMAIN = “miapp”
MY_APP_VERSION = “miapp0.1”
GetText.update_pofiles(MY_APP_TEXT_DOMAIN,
Dir.glob("{app,lib}/**/*.{rb,rhtml}"),
MY_APP_VERSION)
end

Ejecutando con --trace se muestra esto

c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale/win32.rb:39:in
call' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale/win32.rb:39:indefault_locale’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale/base.rb:48:in
system' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale/base.rb:56:incharset’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale.rb:39:in
set_default' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/locale.rb:50:indefault=’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext.rb:528:in
locale=' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/parser/active_record.rb:75:inparse’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:173:in
parse' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:171:ineach’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:171:in
parse' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:169:ineach’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:169:in
parse' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:242:inrun’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:240:in
open' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:240:inrun’
c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/rgettext.rb:266:in
rgettext' c:/compil/ruby/lib/ruby/gems/1.8/gems/gettext-1.93.0/lib/gettext/utils.rb:146:inupdate_pofiles’
C:/eclipse-workspaces/rails/myporra/rakefile:23
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in
call' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:inexecute’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in
each' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:inexecute’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in
invoke_with_call_chain' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:insynchronize’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in
invoke_with_call_chain' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:ininvoke’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1931:in
invoke_task' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:intop_level’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in
each' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:intop_level’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in
standard_exception_handling' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1903:intop_level’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1881:in
run' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:instandard_exception_handling’
c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1878:in
run' c:/compil/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/bin/rake:31 c:/compil/ruby/bin/rake:16:inload’
c:/compil/ruby/bin/rake:16

Gracias de antemano.

Hola , quizas esto no te ayuda para lo que preguntas pero…
yo en lo personal uso simple localization , tiene todo lo que puedas
necesitar localizar

http://simple-localization.arkanis.de/

PD: odio gettext , sus .po y .mo arghh … :stuck_out_tongue:

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

Michel,

Porque no te gusta gettext?

Si, pero simple localization solo permite un idioma a la vez ¿no? a mi
me
interesa en un futuro poder ofrecer más.

Por si os sircve de algo, uso Rails 1.2
Si, me hace falta actualizarme :frowning:

2008/10/3 Miguel M. [email protected]

Pues si, va a ser de eso. Acabo de leer que existe incompatbilidad de
las
últimas versiones de Rails con gettext, que hay que que actualizar este
último.

Ya os contaré.

2008/10/3 Rafa C. [email protected]

Hola Rafa,

simple localization te permite tener cuantos idiomas quieras :smiley:

mira la documentación para que veas lo que puedes hacer con este plugin

http://simple-localization.arkanis.de/

Saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

On Fri, Oct 3, 2008 at 3:43 AM, Rafa C. [email protected]
wrote:

Miguel,

A mi tambien me ha traido algun dolor de cabeza utilizar gettext,
pero sin duda creo que actualmente es el mejor sistema para traducir
aplicaciones ya que:

  • Dispone de rutinas para extraer las cadenas de texto traducibles de
    las plantillas.
  • Dispone de software para poder gestionar las traducciones, como por
    ejemplo “poedit”.

Lo de la extracción de cadenas de texto y el software de extracción de
software es muy util cuando tu aplicación tiene decenas de plantillas,
cosa que no se si con otros softwares es tan sencillo con gettext, he
mirado simple_localization, y no incluye ninguna rake task para
extraer las cadenas de texto de las plantillas. Como lo gestionas?

En Rails edge ya se puede utilizar la internacionalización y va
bastante bien, pero hay una cosa que no me acaba de gustar que es como
se definen las cadenas a traducir.

<%=t :hello_world %>

En el fichero ruby o yml se defines las traducciones:

en_US:
  hello_world: Hello World

Pero aquí viene lo que puede llevar a confusión:

en_US:
  hello_world: hello world
  hello_world: Hello World
  hello_world: Hello world

Podemos definir el “string” (que es un simbolo) con diferentes strings
traducibles. Y eso es bastante feo, al igual que siempre ha de existir
el fichero de traducciones para que nuestra aplicación puede
funcionar.

En gettext por exemplo podemos dejar la aplicación como “traducible”.

<%= _("Hello World") %>

De manera que siempre podremos decidir si esa aplicación la queremos
traducir o no. No hace falta hacer un require de gettext ya que
podemos extender la clase objeto con el método _.

El plugin “gettext_localize” creo que soluciona mejor el problema que
“simple_localization”, desde el punto de vista que es gettext y no
ficheros yaml, de manera que todas la herramientas de edición de
ficheros po, funcionaran.

No se, el tema de la internacionalización de las aplicaciones es un
tema que encuentro muy interesante ya que se está resolviendo a nivel
técnico, pero no se tiene en cuenta de que esas traducciones las han
de realizar traductores, que para eso existen, que no tienen porque
ser personas muy técnicas, pero herramientas como poedit pueden ayudar
mucho a que realizen la tarea.

No me alargo más :wink:

On Sat, Oct 4, 2008 at 12:04 AM, Miguel M.

2008/10/4 Francesc E. [email protected]:

Podemos definir el “string” (que es un simbolo) con diferentes strings
traducibles. Y eso es bastante feo, al igual que siempre ha de existir
el fichero de traducciones para que nuestra aplicación puede
funcionar.

Update: La aplicación con la internacionalización por defecto de
Rails (edge) si que funciona, pero apareceran cosas como “es_ES, Hello
World”. Ese mecanismo se puede sobreescribir, pero por defecto ahora
funciona así.

Comentar tambien que se pueden traducir tanto símbolos como strings.

<%=t :hello_world %>
<%=t "Hello World %>
<%=t "Hello world %>

Una rake task que gestionara los ficheros de traducciones extrayendo
los strings/simbolos y haciendo un merge con la versión actual seria
genial.

@francesc,

no me gusta gettext porque no he tenido buenos resultados, encuentro muy
tedioso el tema de los archivitos .po y .mo, a veces no se me
actualizaban
bien, supongo que era porque algo hacia mal, pero en fin… las malas
experiencias con gettext me llevaron a buscar otra alternativa mas
simple, y
encontré simple localization, que esta muy bueno, traduce helpers de
rails
(fechas, numeros , etc…) , modelos (validaciones y campos), y strings
simples, y como eso es todo lo que necesito, por ahora , en mis
proyectos ,
anda muy bien para mí.

saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

On Fri, Oct 3, 2008 at 11:31 AM, Francesc E. <

Hola Francesc,

En Simple Localization también se pueden definir strings a traducir,
pero no
hay rake task para extraer los strings , estos solo se definen en el
archivo
de configuracion yml y luego se <%= l(:hello_world) %> en las vistas, te
dejo un archivo de configuracion para que lo revises [1].

a mi la verdad lo que me gusta de este plugin es que es capaz de
traducir
los helpers, modelos y mensajes de AR, ademas de los strings.

creo que en Rails 2.0.2 me encontré con un problema en el init del
plugin
pero que se resuelve aqui [2], no he revisado si hay otra versión con
eso
resuelto

¿como lo hacen ustedes para traducir contenidos? me refiero a si los
usuarios publican contenidos , ¿dejamos campos adicionales en el modelo,
para que publiquen en otros idiomas ? ej, title | title_es | title_en |
body
| body_es | body_en ??

[1] http://pastie.org/285297
[2] http://animalita.cl/tags/simple%20localization

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/10/4 Francesc E. [email protected]

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/10/5 Francesc E. [email protected]

en tu aplicación. Como lo haces? Cada vez que añades un string, lo
añades al YAML?

si :D, por ahora no tengo cientos de strings.

Ayer experimenté con un aplicación que tengo en Gettext remplazandolo
por el nuevo sistema de traducción de Rails. (El Simple Backend) y el
problema que ya conocia, el como extraer las cadena traducibles lo
solucioné creandome unos métodos y unas rake tasks.

buena solucion, ¿y ese rake escribe los strings directo en el yml no?

[1]. Quizas hay alguna mejor manera de hacerlo pero està en producción
a varios sites y no hemos tenido ningun problema. Quizas una cosa que
le falta es que cuando haces un find, deberia solo hacer un select con
los campos requeridos, quiero decir con esto que si estas en la locale
“es”, no tienen porque estar en el select, eso de momento lo hacemos a
mano.

Igualmente comentar que eso lo utilizamos en sites que funcionan con
Gettext por lo que utilizamos “GetText.locale.language” para hacer la
detección del lenguaje. Esa parte seria interesante actualizarla para
que fuera más “agnostica” del sistema de traducción que se utilice.

watching it!,

[1] http://github.com/fesplugas/simplified_translation/tree/master


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Saludos

2008/10/5 Miguel M. [email protected]:

En Simple Localization también se pueden definir strings a traducir, pero no
hay rake task para extraer los strings , estos solo se definen en el archivo
de configuracion yml y luego se <%= l(:hello_world) %> en las vistas, te
dejo un archivo de configuracion para que lo revises [1].

Esto puede ser un problema si tienes centenares de strings a traducir
en tu aplicación. Como lo haces? Cada vez que añades un string, lo
añades al YAML?

Ayer experimenté con un aplicación que tengo en Gettext remplazandolo
por el nuevo sistema de traducción de Rails. (El Simple Backend) y el
problema que ya conocia, el como extraer las cadena traducibles lo
solucioné creandome unos métodos y unas rake tasks.

¿como lo hacen ustedes para traducir contenidos? me refiero a si los
usuarios publican contenidos , ¿dejamos campos adicionales en el modelo,
para que publiquen en otros idiomas ? ej, title | title_es | title_en | body
| body_es | body_en ??

Yo al final desarrollé un plugin para poder hacer las traducciones de
una manera que yo encontraba sencilla. Se llama simplified_translation
[1]. Quizas hay alguna mejor manera de hacerlo pero està en producción
a varios sites y no hemos tenido ningun problema. Quizas una cosa que
le falta es que cuando haces un find, deberia solo hacer un select con
los campos requeridos, quiero decir con esto que si estas en la locale
“es”, no tienen porque estar en el select, eso de momento lo hacemos a
mano.

Igualmente comentar que eso lo utilizamos en sites que funcionan con
Gettext por lo que utilizamos “GetText.locale.language” para hacer la
detección del lenguaje. Esa parte seria interesante actualizarla para
que fuera más “agnostica” del sistema de traducción que se utilice.

[1] http://github.com/fesplugas/simplified_translation/tree/master

buena solucion, ¿y ese rake escribe los strings directo en el yml no?

Los extrae de las plantillas, controladores, los mete en un Hash,
carga el fichero yml, hace un merge de los Hashes y finalmente lo
escribe.

De funcionar funciona, supongo que se deberia testear un poco más. [1]

[1] 14768’s gists · GitHub