[ruby-gnome2-doc-cvs] [Hiki] create - tips_libglade_i18n

Zurück zum Archiv-Index

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 5日 (月) 09:25:56 JST


-------------------------
REMOTE_ADDR = 200.216.151.125
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tips_libglade_i18n
-------------------------
= Suportando internacionaliza$Bgc(Bo (i18n) em Ruby/Libglade

== Introdu$Bgc(Bo

Este tutorial mostrar como fazer Ruby/Libglade aproveitar as vantagens das strings traduzidas pelo gettext. Para aqueles de voc$BsT(B que conhecem pouco ou nada dos conceitos do gettext,
ler o ((<manual|URL:http://www.gnu.org/software/gettext/manual>)) provavelmente uma boa id$BqJ(Ba.

Antes de iniciar, certifique-se que voctem o Ruby-GNOME2 instalado.

Enquanto escrevia este tutorial, usei Ruby 1.8.1, Ruby-GNOME2 0.8.1 e gettext
0.12.1 em uma m$BaR(Buina com o Gentoo Linux. Podem existir algumas diferen$BmB(Bs entre as vers$B(Bs que causam problemas, ent$BeP(B lembre-se disso se algo n$BeP(B funcionar para voc N$BeP(B sei se ou como qualquer coisa disto funciona no Microsoft Windows. Se algu$BqN(B gostaria de contribui informa$Bne(Bo sobre isso, seria de grande ajuda.

Um bocado desta inforam$Bne(Bo foi obtida do 
((<FAQ de PyGTK|URL:http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq22.001.htp>)).

== Criando uma interface no Glade

O primeiro passo pe criar a interface com 'glade-2'. Toda vez que voccria um componente (widget) com um campo de texto, o XML gerado terum campo 'translatable="yes"' adicionado a ele.

Ent$BeP(B vpara "Options->LibGlade Options" e selecione 'Save Translatable Strings'. No campo de texto, insira um nome de arquivo para salvar as strings ('glade-msg.c' um bom nome). A sa$ByE(Ba (output) estem um formato parecido com C, porque isso o que o xgettext usar

== Criando as tradu$Bnw(Bes

((*Nota*)) esta se$Bne(Bo bastante emprestada do ((<FAQ de PyGTK |URL:http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq22.001.htp>)).
mencionado acima. Incluesta se$Bne(Bo para que o leitor n$BeP(B tenha que dar voltas por a

Pr$B(Bimo, vocquerercriar o arquivo principal de tradu$Bne(Bo. Para fazer isso, use o comando a seguir:

  xgettext -kN_ -o myapp.pot glade-msg.c

Olhe dentro desse arquivo. Vocdeverver as strings de glade listadas. 

Esse arquivo .pot deverser enviado para tradutores. Uma vez que eles recebam o arquivo, eles dever$BeP(B criar um arquivo '.po'. Como um exemplo, para criar uma tradu$Bne(Bo Alemeles usariam:

  LANG=de_DE msginit

Isso criaro arquivo 'de.po', onde as strings traduzidas dever$BeP(B ser entradas. O arquivo de tradu$Bne(Bo precisa ser convertido para um formato bin$BaS(Bio antes de ser usado:

  msgfmt de.po -o myapp.mo

Esse arquivo deverent$BeP(B ser colocado em um diret$B(Bio apropriado. Na minha m$BaR(Buina, isso iria em /usr/share/locale/de/LC_MESSAGES/

== Escrevendo seu c$B(Bigo

Agora para dizer para Ruby/Libglade carregar os arquivos de 'locale'. Normalmente vocteria uma linha no seu c$B(Bigo similar a esta:

  @glade = GladeXML.new('myapp.glade') { |handler| method(handler) }

Para conseguir que as strings traduzidas sejam carregadas, vocprecisa especificar um nome de 'locale' para que o glade saiba qual de arquivo carregar as strings. Altere o c$B(Bigo acima para:

  @glade = GladeXML.new('myapp.glade', nil, 'myapp') { |handler| method(handler) }

O terceiro par$BcN(Betro, 'myapp', dirao glade para procurar por 'myapp.mo'. Agora para carregar a aplica$Bne(Bo:

  LANG=de_DE ruby myapp.rb

As strings traduzidas dever$BeP(B aparecer. Isso tudo.

== Gerando automaticamente o arquivo de tradu$Bne(Bo bin$BaS(Bio

((*Nota*)) esta se$Bne(Bo baseada no c$B(Bigo inclu$ByE(Bo com this section is based on code included with ((<a distribui$Bne(Bo ruby-gettext
|URL:http://ponx.s5.xrea.com/hiki/ruby-gettext.html>)) de Masao Mutoh.

Para cada arquivo traduzido, vocprecisarcriar um novo arquivo '.mo'. Com o ((<install.rb|URL:http://i.loveruby.net/en/setup.html>)) de Minero
Aoki isso se torna bastante f$BaD(Bil de automatizar. 

Para este exemplo n$B(B fingiremos que jtemos tradu$Bnw(Bes em Espanhol e Alem$BeP(B criadas, nomeadas 'de.po' e 'es.po', respectivamente.

  cd $PROJECTROOT
  mkdir po
  mkdir po/de
  mkdir po/es
  cp de.po po/de/myapp.po
  cp es.po po/es/myapp.po

Ent$BeP(B, no seu diret$B(Bio principal, crie um arquivo nomeado post-setup.rb que cont$BqN(B:

  require 'fileutils'

  podir = srcdir_root + "/po/"
  modir = srcdir_root + "/data/locale/%s/LC_MESSAGES/"

  Dir.glob("po/*/*.po") do |file|
      lang, basename = /po\/([\w\.]*)\/(.*)\.po/.match(file).to_a[1,2]
      FileUtils.mkdir_p modir % lang
      system("msgfmt #{podir}#{lang}/#{basename}.po -o #{modir}#{basename}.mo" % lang)
  end

Vocpode tamb$BqN(B querer criar o seguinte pre-clean.rb:
  
  Dir.glob("data/**/*.mo").each do |file|
      File.delete(file)
  end

Agora, quando 'ruby install.rb setup' executado, os arquivos de tradu$Bne(Bo ser$BeP(B gerados.
No 'ruby install.rb install' eles ser$BeP(B instalados no local correto.

== Conclus$BeP(B

Espero que isto tenha sido claro. Se as pessoas tiverem problemas, sintam-se livres para me contactarem e tentarei ajudlas. Gostaria de melhorar este documento, assim tamb$BqN(B me contacte com corre$Bnw(Bes e etc.

== Autor

Zachary P. Landau (kapheine AT hypa DOT net).

O leitor deve estar avisado que estou longe de ser um expert no assunto. Eu apenas recentemente comecei a tentar adicionar suporte a internacionaliza$Bne(Bo a um dos meus projetos. Enquanto procurava por informa$Bne(Bo, encontrei apenas peda$BmP(Bs que precisavam ser unidos. Escrevi este tutorial em uma tentativa de evitar que outras pessoas tenham que fazer o mesmo.

Isso dito, eu ficarua feliz em incorporar adi$Bnw(Bes e corre$Bnw(Bes de pessoas que sabem mais sobre o assunto. Por favor me contacte com qualquer informa$Bne(Bo que voctenha.

== Log de Altera$Bnw(Bes

:2004-03-20 Zachary P. Landau
 Vers$BeP(B inicial.





ruby-gnome2-cvs メーリングリストの案内
Zurück zum Archiv-Index